package fachklassen;

import helper.BLError;
import helper.BLWarning;
import helper.Helper;

import java.util.ArrayList;
import java.util.Date;

import businesslogic.BLManager;

import database.DatabaseManager;
/**
 * Fachklasse mit Gettern und Settern
 *
 * @author	Michael Wolf
 * @author	Tanja Goletz
 * @version	1.0
 */
public class Klasse {
	int klassenID;
	int klassennummer;
	Date einschulungsjahr;
	
	int bildungsgangID;
	Bildungsgang bildungsgang = null;
	ArrayList<Azubi> azubis = null;
	
	public int getKlassenID() {
		return klassenID;
	}
	public void setKlassenID(int klassenID) {
		this.klassenID = klassenID;
	}
	public int getKlassennummer() {
		return klassennummer;
	}
	public void setKlassennummer(int klassennummer) {
		this.klassennummer = klassennummer;
	}
	public Date getEinschulungsjahr() {
		System.out.println("("+einschulungsjahr+")");
		return einschulungsjahr;
	}
	public void setEinschulungsjahr(Date einschulungsjahr) {
		this.einschulungsjahr = einschulungsjahr;
	}
	public Bildungsgang getBildungsgang() throws BLError, BLWarning {
		if (bildungsgang == null) {
			ArrayList<Object> elements = DatabaseManager.getInstance().getByAttribute(Bildungsgang.class, "bildungsgangID", bildungsgangID);
			if (elements.size() == 0) bildungsgang = null;
			else bildungsgang = (Bildungsgang)elements.get(0);
		}
		return bildungsgang;
	}
	public void setBildungsgang(Bildungsgang bildungsgang) {
		this.bildungsgang = bildungsgang;
		this.bildungsgangID = bildungsgang.getBildungsgangID();
	}
	public int getBildungsgangID() {
		return bildungsgangID;
	}
	public void setBildungsgangID(int bildungsgangID) {
		this.bildungsgangID = bildungsgangID;
		this.bildungsgang = null;
	} 
	public ArrayList<Azubi> getAzubis() throws BLError, BLWarning {
		if (azubis == null) {
			ArrayList<Object> elements = DatabaseManager.getInstance().getByAttribute(Azubi.class, "klassenID", klassenID);
			azubis = new ArrayList<Azubi>();
			for (Object element : elements) {
				azubis.add((Azubi)element);
			}
		}
		return azubis;
	}
	public void setAzubis(ArrayList<Azubi> azubis) {
		this.azubis = azubis;
	}
	public String toString() {
		try {
			return this.getBildungsgang().getKuerzel()+this.getKlassennummer()+this.getEinschulungsjahr();
		} catch (Exception e) {
			
			BLManager.getInstance().handleError(e);
		}
		return "";
	}
	public String getBezeichnung() throws BLError, BLWarning {
		
		return this.getBildungsgang().getKuerzel() + (Helper.getCurrentSchuljahr() - Helper.getSchuljahr(this.getEinschulungsjahr()) + 1) + this.getKlassennummer();
	}
	
	public Klassenlehrer getKlassenlehrer() throws BLError, BLWarning {
		return getKlassenlehrer(new Date());
	}
	
	public Klassenlehrer getKlassenlehrer(Date datum) throws BLError, BLWarning {
		ArrayList<Object> elements = DatabaseManager.getInstance().getByAttribute(KlassenlehrerKlasse.class, "klassenID", klassenID);
		for (Object element : elements) {
			if (((KlassenlehrerKlasse)element).getSchuljahr() != null && Helper.getSchuljahr(datum) == Helper.getSchuljahr(((KlassenlehrerKlasse)element).getSchuljahr())) return ((KlassenlehrerKlasse)element).getKlassenlehrer();
		}
		return null;
	}
}
